package com.southminority.ethnic.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

/**
 * 学术论文数据传输对象
 * 用于管理端数据传输
 * 
 * @author SouthMinority
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class PaperDTO extends BaseDTO {

    /**
     * 论文ID（更新时必需）
     */
    private Long id;

    /**
     * 论文标题
     */
    @NotBlank(message = "论文标题不能为空")
    @Size(max = 300, message = "论文标题长度不能超过300个字符")
    private String title;

    /**
     * 作者（多个作者用逗号分隔）
     */
    @NotBlank(message = "作者不能为空")
    @Size(max = 500, message = "作者长度不能超过500个字符")
    private String authors;

    /**
     * 期刊名称/会议名称
     */
    @NotBlank(message = "期刊/会议名称不能为空")
    @Size(max = 200, message = "期刊/会议名称长度不能超过200个字符")
    private String journal;

    /**
     * 发表年份
     */
    @NotNull(message = "发表年份不能为空")
    private Integer publicationYear;

    /**
     * 卷号
     */
    private String volume;

    /**
     * 期号
     */
    private String issue;

    /**
     * 页码
     */
    private String pages;

    /**
     * DOI标识
     */
    @Size(max = 100, message = "DOI长度不能超过100个字符")
    private String doi;

    /**
     * 摘要
     */
    @Size(max = 1000, message = "摘要长度不能超过1000个字符")
    private String abstractText;

    /**
     * 关键词
     */
    @Size(max = 300, message = "关键词长度不能超过300个字符")
    private String keywords;

    /**
     * PDF文件URL
     */
    private String pdfUrl;

    /**
     * 代码链接URL
     */
    private String codeUrl;

    /**
     * 分类
     */
    @Size(max = 100, message = "分类长度不能超过100个字符")
    private String category;

    /**
     * 论文类型：期刊论文、会议论文、专著、其他
     */
    @NotBlank(message = "论文类型不能为空")
    @Size(max = 50, message = "论文类型长度不能超过50个字符")
    private String paperType;

    /**
     * 语言类型
     */
    @Size(max = 50, message = "语言类型长度不能超过50个字符")
    private String languageType;

    /**
     * 引用次数
     */
    private Integer citationCount;

    /**
     * 下载次数
     */
    private Integer downloadCount;

    /**
     * 状态：1-已发布，0-草稿，-1-已删除
     */
    private Integer status;
} 
